import { jsonArray } from '@/api/productApi/file'
import Vue from 'vue'

export function treeData(list, cascaderIdList = []) {
	list.forEach(item => {
		item.cascaderIdList = [...cascaderIdList]
		item.cascaderIdList.push(item.fieldId)
		if (item.childNodeList && Array.isArray(item.childNodeList) && !item.childNodeList.length) {
			Vue.delete(item, 'childNodeList')
		}
		if (item.childNodeList && Array.isArray(item.childNodeList) && item.childNodeList.length) {
			treeData(item.childNodeList, item.cascaderIdList)
		}
	})
	return list
}

// 处理多维数组
export function processingRawData(list) {
	// 1.拿出顶级数据
	const treeData = list.filter(item => item.parentId === '0')

	// 2.去除顶级数据在循环
	const listData = list.filter(item => item.parentId !== '0')

	// 3.取得所有数据的ID
	let listNum = []
	listData.forEach(item => {
		listNum.push(Number(item.fieldId))
	})

	// 4.将要循环的数组去重
	listNum = listNum.filter(function (item, index) {
		return listNum.indexOf(item) === index
	})

	// 5.形成多维数组
	/*
	因为数组是引用类型数据类型，子级的改动会影响到所有引用他的地方,此时将 “5-2”
	*/
	for (let i = 0; i < listNum.length; i++) {
		listData.forEach(item => {
			// 5-1.一层循环，生成数组，保证每组数据都存在一个childNodeList数组
			if (listNum[i] === Number(item.fieldId)) {
				item.childNodeList = []
				// 5-2.二层循环，将所有父级ID === 当前一层循环数据当前组ID的存入一层循环数据当前组的childNodeList
				listData.forEach(items => {
					if (Number(items.parentId) === Number(item.fieldId)) {
						item.childNodeList.push(items)
					}
				})
			}
		})
	}

	// 6.将步骤数据嵌入到与顶级数据 raiseType 相同的数据
	treeData.forEach(item => {
		item.childNodeList = listData.filter(items => item.fieldId === items.parentId)
	})

	const data = jsonArray(treeData)

	return data
}

// 将字段级数据置空，防止页面加载卡顿
export function dataProcessing(list) {
	const data = jsonArray(list)
	data.forEach(item => {
		item.childNodeList.forEach(items => {
			if (items.childNodeList && Array.isArray(items.childNodeList) && items.childNodeList.length) {
				items.childNodeList = []
			}
		})
	})

	return data
}
